home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / various / ascii reader.amos / ascii reader.amosSourceCode
AMOS Source Code  |  1994-01-01  |  9KB  |  316 lines

  1. '   ______________________________________________________________________ 
  2. '  |                                                                      |
  3. '  |                             ASCII READER                             |
  4. '  |                             ~~~~~~~~~~~~                             |
  5. '  |             Created for AMOS Basic by Glenn N Babic, 1993            |
  6. '  |                                                                      |
  7. '  |           Use this program to read "ASCII/ASCII Reader.doc"          |
  8. '  |______________________________________________________________________|
  9.  
  10. If Fast Free=False Then Close Editor : Close Workbench 
  11.  
  12. Dir$="Df0:" : Break Off 
  13. Colour Back $DDD : Hide On 
  14. HGHT=30+Ntsc*6
  15. WDTH=80
  16. Screen Open 0,640,HGHT*8,2,Hires
  17. Screen Display 0,,56,,(HGHT-1)*8
  18. Curs Off : Palette $DDD,$0 : Pen 1 : Paper 0 : Cls 
  19.  
  20. Screen Open 1,640,10,2,Hires
  21. Screen Display 1,,44,,
  22. Curs Off : Palette $DDD,$228 : Ink 0,1 : Cls 1
  23. Screen To Back 1
  24. Set Text 2
  25. Text 10,7,"A S C I I   R E A D E R" : Set Text 0
  26. Text 212,,"-  By Glenn N Babic  -  Written for AMOS Basic, 1993"
  27. Screen 0
  28.  
  29. Set Paint 1
  30.  
  31. Global FILE_NAME$,FILE_LENGTH,HGHT,WDTH,FILE_END,DY
  32. Global PAGE_START,PAGE_END,PCNT1
  33. DY=Ntsc*24
  34.  
  35. HELP
  36.  
  37. Repeat 
  38.  
  39.    I$=Inkey$ : S=Scancode
  40.    If S=40 Then OPEN_FILE
  41.    If S=95 Then HELP
  42.    If FILE_LENGTH
  43.       If S=25 : SEND_TO_PRINTER : End If 
  44.       P=PAGE_START
  45.       If S=76 or S=62 : LINE_UP : End If 
  46.       If S=77 or S=30 : LINE_DOWN : End If 
  47.       If S=63 : PAGE_UP : End If 
  48.       If S=31 or S=64 : PAGE_DOWN : End If 
  49.       If S=61 : PAGE_START=Start(6) : REFRESH : End If 
  50.       If S=29 : BOTTOM : End If 
  51.       If P<>PAGE_START : PERCENTAGE : End If 
  52.    End If 
  53.  
  54. Until S=69
  55.  
  56. Colour Back 0
  57. Default 
  58. Edit 
  59.  
  60. Procedure HELP
  61.  
  62.    Ink 1,,1 : Bar 163,32+DY To 483,203+DY
  63.    Ink 0,1,1 : Bar 160,30+DY To 480,201+DY
  64.    Ink 1,0
  65.    Set Text 2 : Text 236,46+DY,"- H E L P   M E N U -" : Set Text 0
  66.    Text 272,Ygr+16,"CONTROL KEYS"
  67.    Text 188,Ygr+12,"HELP...........View this menu"
  68.    Text 188,Ygr+9,"L..............Load an ASCII file"
  69.    Text 188,Ygr+9,"P..............Print file/page"
  70.    Text 188,Ygr+9,"ESC............Quit ASCII Reader"
  71.    Text 188,Ygr+9,"Home�..........View start of file"
  72.    Text 188,Ygr+9,"End�...........View end of file"
  73.    Text 188,Ygr+9,"Pg Up�.........Scroll up a page"
  74.    Text 188,Ygr+9,"Pg Dn�/SPACE...Scroll down a page"
  75.    Text 188,Ygr+9,"Up Arrow�......Up one line"
  76.    Text 188,Ygr+9,"Down Arrow�....Down one line"
  77.    Text 224,Ygr+13,"1 - Found on num. keypad"
  78.    Text 188,Ygr+8,"2 - Either num. keypad or cursors"
  79.    If FILE_LENGTH
  80.       Text 260,Ygr+15,"* Press a key *"
  81.    Else 
  82.       Text 228,Ygr+15,"* Select Load or Quit *"
  83.    End If 
  84.    If FILE_LENGTH Then Wait Key : Cls : REFRESH
  85.  
  86. End Proc
  87. Procedure REFRESH
  88.  
  89.    Home 
  90.  
  91.    LINE_START=PAGE_START
  92.  
  93.    Repeat 
  94.       RET=Hunt(LINE_START To Min(LINE_START+WDTH,FILE_END),Chr$(10))
  95.       If RET=False Then RET=Min(LINE_START+WDTH,FILE_END+1)
  96.       Cline 
  97.       For I=LINE_START To RET-1 : Print Chr$(Peek(I)); : Next I
  98.       If RET>LINE_START and RET<LINE_START+WDTH Then Print 
  99.       LINE_START=RET+1+(Peek(RET)<>10)
  100.       Inc LINES
  101.    Until LINES>HGHT-2 or LINE_START>FILE_END-2
  102.  
  103.    PAGE_END=LINE_START
  104.  
  105. End Proc
  106. Procedure OPEN_FILE
  107.  
  108.    On Error Goto HANDLE_ERROR
  109.  
  110.    Show On 
  111.    MEM$="("+Str$(Chip Free+Fast Free+LAST_FILE_LENGTH)-" "+" bytes free)"
  112.    A$=Fsel$("ASCII/","","Choose ASCII file to view",MEM$)
  113.    Hide On 
  114.  
  115.    LAST_FILE_LENGTH=FILE_LENGTH
  116.    Open In 1,A$ : FL=Lof(1) : Close 1
  117.    ALERT["Loading...",False]
  118.    Erase 6
  119.    Reserve As Work 6,FL
  120.    Bload A$,6
  121.  
  122.    FILE_NAME$=A$
  123.  
  124.    Screen 1
  125.    If FILE_LENGTH=False
  126.       Set Text 6
  127.       Text -4,7," File:"+Space$(46)+"Size:"+Space$(14)+"Pos:      "
  128.       Set Text 0
  129.    End If 
  130.    FILE_LENGTH=FL
  131.    Text 52,7,Left$(FILE_NAME$,43)+Space$(43-Len(Left$(FILE_NAME$,43)))
  132.    B$=Left$(Str$(FL)-" "+" bytes",11)
  133.    Text 460,7,B$+Space$(11-Len(B$))
  134.    Text 604,7,"0%  "
  135.    Screen 0
  136.  
  137.    PAGE_START=Start(6)
  138.    FILE_END=Start(6)+Length(6)
  139.  
  140.  
  141.  1 Cls : REFRESH
  142.    If B$<>"" Then PCNT1=PAGE_END
  143.    PERCENTAGE
  144.    Pop Proc
  145.  
  146.    HANDLE_ERROR:
  147.    If Errn=23 Then ALERT["No file chosen.",True]
  148.    If Errn=24 Then ALERT["Sorry - File too large!",True]
  149.    If Errn=81 Then ALERT["File not found!",True]
  150.    If Errn=94 Then ALERT["That file is corrupt!",True]
  151.    Resume 2
  152.  
  153.  2 If FILE_LENGTH=False Then HELP Else 1
  154.  
  155. End Proc
  156. Procedure ALERT[A$,F]
  157.    Ink 1 : Bar 298-Len(A$)*4,103+DY To 348+Len(A$)*4,133+DY
  158.    Ink 0,1,1 : Bar 295-Len(A$)*4,101+DY To 345+Len(A$)*4,131+DY
  159.    Ink 1,0
  160.    Set Text 2 : Text 320-Len(A$)*4,118+DY,A$ : Set Text 0
  161.    If F Then Bell 20 : Wait 60
  162. End Proc
  163. Procedure SEND_TO_PRINTER
  164.  
  165.    Ink 1 : Bar 163,87+DY To 483,148+DY
  166.    Ink 0,1,1 : Bar 160,85+DY To 480,146+DY
  167.    Ink 1,0
  168.    Set Text 2 : Text 264,102+DY,"- PRINT FILE -" : Set Text 0
  169.    Text 200,115+DY,"How much do you wish to print?"
  170.    Reserve Zone 3
  171.    Text 208,133+DY,"ALL" : Text 284,,"THIS PAGE" : Text 396,,"CANCEL"
  172.    For I=1 To 3
  173.       Box 180+(I-1)*100,123+DY To 260+(I-1)*100,137+DY
  174.       Set Zone I,180+(I-1)*100,123+DY To 260+(I-1)*100,137+DY
  175.    Next I
  176.    Wait Vbl : Limit Mouse 208,141+DY To 368,202+DY
  177.    X Mouse=288 : Y Mouse=172+DY : Show On 
  178.    Repeat : M=Mouse Zone : Until M and Mouse Click=1
  179.    Reserve Zone 
  180.    Wait Vbl : Limit Mouse 
  181.    If M=1 Then FIRST=Start(6) : LAST=FILE_END
  182.    If M=2 Then FIRST=PAGE_START : LAST=PAGE_END-1
  183.    If M<>3
  184.       Lprint ""; : Hide On 
  185.       Ink 0,1,1 : Bar 160,85+DY To 480,146+DY
  186.       Ink 1,0 : Set Text 2 : Text 276,112+DY,"Printing..." : Set Text 0
  187.       Text 212,124+DY,"* Press any key to cancel *"
  188.       For I=FIRST To LAST
  189.          A$=Chr$(Peek(I))
  190.          If A$=Chr$(10) : A$=A$+Chr$(13) : End If 
  191.          Lprint A$;
  192.          Exit If Inkey$<>""
  193.       Next I
  194.    End If 
  195.    Hide On : Clear Key 
  196.    Cls : REFRESH
  197.  
  198. End Proc
  199. Procedure PAGE_UP
  200.  
  201.    Repeat 
  202.       LINE_UP
  203.       Inc LINES
  204.    Until LINES>HGHT-2 or PAGE_START<=Start(6)
  205.  
  206. End Proc
  207. Procedure PAGE_DOWN
  208.  
  209.    Repeat 
  210.       LINE_DOWN
  211.       Inc LINES
  212.    Until LINES>HGHT-2 or PAGE_END>FILE_END-2
  213.  
  214. End Proc
  215. Procedure LINE_UP
  216.  
  217.    If PAGE_START<=Start(6) Then Bell 20 : Pop Proc
  218.  
  219.    VARIABLES_UP
  220.  
  221.    Print At(0,0);Chr$(30);
  222.  
  223.    RET=Hunt(PAGE_START To Min(PAGE_START+WDTH,FILE_END),Chr$(10))
  224.    If RET=False Then RET=Min(PAGE_START+WDTH,FILE_END+1)
  225.    For I=PAGE_START To RET-1
  226.       Print Chr$(Peek(I));
  227.    Next I
  228.    If RET>PAGE_START and RET-PAGE_START<WDTH Then Print 
  229.  
  230.    'RET=Hunt(LINE_START To FILE_END,Chr$(10)) 
  231.    'If RET=0 Then RET=FILE_END+1
  232.    'For I=LINE_START To RET-1 
  233.    '   Print Chr$(Peek(I)); 
  234.    'Next I
  235.    'If RET<LINE_START+WDTH : Print : End If 
  236.  
  237.    Locate 0,HGHT-1 : Cline 
  238.  
  239. End Proc
  240. Procedure LINE_DOWN
  241.  
  242.    If PAGE_END>FILE_END-2 Then Bell 20 : Pop Proc
  243.  
  244.    'PAGE_START down one line... 
  245.    RET=Hunt(PAGE_START To Min(PAGE_START+WDTH,FILE_END),Chr$(10))
  246.    If RET=False Then RET=Min(PAGE_START+WDTH,FILE_END+1)
  247.    PAGE_START=RET+1+(Peek(RET)<>10)
  248.  
  249.    RET=Hunt(PAGE_END To Min(PAGE_END+WDTH,FILE_END),Chr$(10))
  250.    If RET=False Then RET=Min(PAGE_END+WDTH,FILE_END+1)
  251.    For I=PAGE_END To RET-1
  252.       Print Chr$(Peek(I));
  253.    Next I
  254.    If RET>PAGE_END and RET-PAGE_END<WDTH Then Print 
  255.    'PAGE_END down one line... 
  256.    PAGE_END=RET+1+(Peek(RET)<>10)
  257.  
  258. End Proc
  259. Procedure PERCENTAGE
  260.    
  261.    If FILE_END-PCNT1<=0
  262.       PERCENT=100
  263.    Else 
  264.       PERCENT=((PAGE_END-PCNT1+1)*100)/(FILE_END-PCNT1)
  265.    End If 
  266.    Screen 1
  267.       Text 604,7,Str$(PERCENT)-" "+"%  "
  268.    Screen 0
  269.  
  270. End Proc
  271. Procedure BOTTOM
  272.  
  273.    PAGE_START=FILE_END-1
  274.    For I=1 To HGHT-1
  275.       VARIABLES_UP
  276.    Next I
  277.    REFRESH
  278.  
  279. End Proc
  280. Procedure VARIABLES_UP
  281.  
  282.    'PAGE_START/END up one line... 
  283.    For J=0 To 1
  284.       If J=0 Then LINE_START=PAGE_START Else LINE_START=PAGE_END
  285.       RET=Max(LINE_START-WDTH-3,Start(6)-1)
  286.       Repeat 
  287.          LAST_RET=RET+1
  288.          RET=Hunt(LAST_RET To LINE_START-1,Chr$(10))
  289.       Until RET=False
  290.       If LAST_RET=Max(LINE_START-WDTH-2,Start(6))
  291.          For I=LINE_START-2 To Start(6)-1 Step -1
  292.             If Peek(I)=10 or I=Start(6)-1
  293.                LINE_START=(LINE_START-2-I)/WDTH*WDTH+1+I : Exit 
  294.             End If 
  295.          Next I
  296.       Else 
  297.          LINE_START=LAST_RET
  298.       End If 
  299.       If J=0 Then PAGE_START=LINE_START Else PAGE_END=LINE_START
  300.    Next J
  301.  
  302.    'Do  
  303.    '   RET=Hunt(LAST_RET To PAGE_START-1,Chr$(10))
  304.    '   If RET=0 Then PAGE_START=LAST_RET : Exit 
  305.    '   LAST_RET=RET+1 
  306.    'Loop  
  307.    '
  308.    ''PAGE_END up one line...  
  309.    'LAST_RET=Max(PAGE_END-WDTH-1,Start(6))
  310.    'Do  
  311.    '   RET=Hunt(LAST_RET To PAGE_END-1,Chr$(10))
  312.    '   If RET=0 Then PAGE_END=LAST_RET : Exit 
  313.    '   LAST_RET=RET+1 
  314.    'Loop  
  315.  
  316. End Proc